package com.glodon.paas.databag.service;

import java.util.List;

import com.glodon.paas.databag.api.bean.DatabagDto;
import com.glodon.paas.databag.api.bean.ResourceDto;

/**
 * 访问数据包资源.
 * 
 * @author botao.liao
 * 
 */
public interface DatabagService {
    /**
     * 提交一个创建数据包的请求.
     * 
     * @param databagDto
     * @return
     * @throws DatabagException
     */
    public DatabagDto create(DatabagDto databagDto);

    /**
     * 根据id返回一个数据包job.
     * 
     * @param databagId
     * @return
     */
    public DatabagDto get(String databagId);

    /**
     * 从document下载原始资源.
     * 
     * @param databagId
     * @return
     */
    public ResourceDto getResource(String databagId);

    /**
     * 根据创建数据包时的相关参数查询job.
     * 
     * @param source
     * @param localId
     * @param version
     * @return
     */
    public List<DatabagDto> findByMetadata(String source, String localId, String version);

    /**
     * 获取数据包的thumbnail资源.
     * 
     * @param databagId
     * @param size
     * @return
     */
    public ResourceDto getThumbnail(String databagId, String size);

    /**
     * 根据Mime类型获取数据包中DefaultView的资源路径.
     * 
     * @param databagId
     * @param mime
     * @return
     */
    public List<String> getResourceByMime(String databagId, String mime);

    /**
     * 根据数据包中的相对路径获取资源.
     * 
     * @param databagId
     * @param path
     * @return
     */
    public ResourceDto getResourceByPath(String databagId, String path);

    /**
     * 删除数据包资源.
     * 
     * @param databagId
     *            要删除的数据包Id
     * @param alternatePublic
     *            如果被删除的数据包是公开的，则需要找一个替换版本的数据包来公开，如果为null，则不需替换
     * @return 数据包不存在返回false，否则返回true.
     */
    public boolean deleteResource(String databagId, String alternatePublic);

    /**
     * 获取Revit的构建属性信息
     * 
     * @param databagId
     * @param constructionId
     * @return
     */
    public String getRevitConstruction(String databagId, String constructionId);

    /**
     * 公开指定的数据包，可以让用户无需登录就能访问
     * 
     * @param databagId
     *            需要公开的数据包Id
     * @return 公开数据包的token
     */
    public String publicDatabag(String databagId);

    /**
     * 取消数据包的公开.
     * 
     * @param databagId
     */
    public void revokeDatabag(String databagId);

    /**
     * 根据token查找databag，如果结果不为空，则说明token有效，为公开的文档
     * 
     * @param token
     * @return
     */
    public DatabagDto findByToken(String token);

    /**
     * 根据文件后缀返回数据包类型.
     * 
     * @param suffix
     *            文件后缀
     * @return
     */
    public String getDatabagType(String suffix);

}
